#pragma once

#include <map>
#include <vector>
#include "DesignEntityType.h"
using namespace std;

class SynonymTable {
	private:
		map<string, DesignEntityType> mSynonymTable;
		
	public:
		SynonymTable(void);
		~SynonymTable(void);
		// If string already exists in SynonymTable, then return false.
		// Otherwise, insert the std::pair<string, DesignEntityType> normally into the SynonymTable.
		//bool insert(string symbol, DesignEntityType);
		// If the string does not exist in the SynonymTable, return INVALID_DESIGN_ENTITY.
		// Otherwise, returns the DesignEntityType of this symbol
		DesignEntityType getDesignEntityType(const string& symbol);
		// If string already exists in SynonymTable and has a different declaration then return false.
		// Otherwise, insert the std::pair<string, DesignEntityType> normally into the SynonymTable.
		bool addSynonym(DesignEntityType designEntity, const string& symbol);
		// Returns the number of synonyms added to the table.
		int getNumberOfSynonyms();
		// Get the synonym at the given index
		std::string getSynonymAtIndex(int index);
};